import type { App, DefineComponent } from 'vue';
import type { VxeTableEventProps, VxeTableProps } from 'vxe-table';
import PaginationTable from './index.vue';
import TreeColumn from './treeColumn.vue';
export const PAGEINATION_INSTANCE = Symbol.for('PAGEINATION_INSTANCE');
export type PaginationProps = {
  /** 筛选表单的数据 */
  formModel?: object;
  /** 自动加载 默认为 true */
  autoLoad?: boolean;
  /** 是否开启分页 默认 false */
  paged?: boolean;
  /** 异步加载Table数据的方法 */
  load: loadPaginationRequest<any>;
  /** 在初始化Table之前需要执行的钩子函数 */
  beforeInitTable?: () => Promise<any>;
  /** 在执行了加载方法之后执行的钩子函数 */
  afterLoadedTable?: () => Promise<any>;
  /** 显示工具栏 默认为true */
  showTools?: boolean;
  /** 导出方法 */
  exportMethod?: () => any;
  /** 导入方法 */
  importMethod?: () => any;
  /**
   * 页码配置
   * 默认： [10, 20, 30, 40, 50, 100]
   */
  pageSizes?: number[];
};
export type PaginationTableType = DefineComponent<
  VxeTableProps & VxeTableEventProps & PaginationProps
>;
const install = (app: App) => {
  const registered = app.component('PaginationTable');
  const treeBtnsRegisted = app.component('TreeColumn');
  if (!registered) {
    app.component('PaginationTable', PaginationTable);
  }

  if (!treeBtnsRegisted) {
    app.component('TreeColumn', TreeColumn);
  }
};

export default install;
